Game Title: Tubby Runner
Platform: Amstrad CPC6128
Author: Wiremu "Te Kani
Language: Locomotive BASIC 1.1
Category: EXTREM-256

Description:
Get ready to run! Uh, well... very... slowly. This is BASIC after all. Once you hear the signal, bash your Amstrad's 30 year old space-bar into oblivion! Behold an epic race against the computer as you both hurtle from one side of the screen to the other! Witness speeds greater than a pregnant sloth! 

This game is more a proof-of-concept for drawing full colour sprites in Amstrad BASIC, without resorting to machine code or overwriting in different colours. The technique involves rendering (lots of) user-defined characters in MODE 2 while displaying in MODE 0 (MODE 2:CALL &BD1C).

Use WinAPE as the emulator on its default settings (Amstrad CPC6128, Locomotive BASIC1.1).

Screenshot:

?
Final 10 Lines of Code Submission:

10 z$=CHR$(8):SYMBOL AFTER 128:DIM f$(3):MODE 1:POKE &B7C4,18:PRINT" LOADING TUBBY RUNNER":PRINT"TAP <SPACE> TO SPRINT!":PRINT" ...."z$z$z$z$;
20 t$="":e=0:a$="":WHILE e=0:READ d$:FOR c=1 TO LEN(d$) STEP 2:a$=MID$(d$,c,2):WHILE a$="xx":a$="00":e=1:WEND:t$=t$+CHR$(VAL("&"+a$)):NEXT:PRINT t$;:t$="":WEND:POKE &B7C4,0 
30 f$(2)="0909202094950A08080808080820202096979899200A0808080808080808202020209B9C9D200A0808080808080808202020209E9FA020xx":f$(3)="0909202080810A08080808080820208283848586870A0808080808080808202088898A8B8C8D0A080808080808080820208E8F90919293xx"
40 a$="":b%=1:e=0:WHILE e=0:FOR a=0 TO 1:e=0:FOR c=1 TO LEN(f$(a+2)) STEP 2:a$=MID$(f$(a+2),c,2):WHILE a$="xx":a$="00":e=1:WEND:g$=CHR$(VAL("&"+a$)):f$(a)=f$(a)+g$:NEXT c,a:WEND:SOUND 2,45,80
50 MODE 2:CALL &BD1C:POKE &B7C3,1:PEN 2:LOCATE 1,3:PRINT"1UP ---":LOCATE 1,13:PRINT"CPU ---":POKE &B7C3,2:PEN 1:CALL &BD1C:t=TIME:a%=1:WHILE a%<=70:LOCATE a%,5:PRINT f$(a%\2 MOD 2):LOCATE b%,15:PRINT f$(1-(b%\2 MOD 2)):b%=b%+(2 AND RND>0.1 AND b%<=70)
60 p$=INKEY$:WHILE p$=" ":a%=a%+2:SOUND 1,800,5,15,,1:p$="":WEND:CALL &BD19:WEND:MODE 1:POKE &B7C4,20:PRINT"You took";(TIME-t)\300;"seconds!":WHILE b%>=70:PRINT" CPU Beat you!":b%=0:WEND:WHILE INKEY$<>"":WEND:WHILE INKEY$="":WEND:RUN
70 DATA "072a1980000000f1e2c7e7e71981000000d361609ac0198200000000005051e519830000000045c79acf1984e3e1e5e3929a9a301985cac7c38a86303030198600000000e3d349711987000000000065cad31988c2cfcbd3000000001989c3a5a10101a5b1c3198a30181a060f031b87198b30303030180b43c2"
80 DATA "072a198c3030302563c3c380198d000a200aa2822200198e00000050e3c7d3c3198f41f141c79ac000a21990c3c3cf808a0000001991c5c7e5500000000019927165309ac2e1e151199300000000e3c3d3821994f1e2c7e7e7e3e1451995d361609ac0cac7c319965041c7924541a5a1199741929a9a90c5c5ca"
90 DATA "072a19988a8630303030309a19990000824920303030199a0101051150000000199b470f431bc767b1e3199c9a0fc3c36131db70199d2563c3c39b65c365199ec7659bdbc3e30000199f2063f100a282000019a09b82d382a200000019a1e4b10000887345b019a20000e4b100db90c519a30040e100007293c3"
100 DATA "072a19bca21353f2a0a0a01119bd414540104041454119be50051101050105501c0c04041c0d0505xx"
"Long Version" with comments:

10 'Part 1: Initialisation
20 z$=CHR$(8)
30 SYMBOL AFTER 128
40 DIM f$(3)
50 'Set up loading screen
60 MODE 1
70 'POKE equivalent of "LOCATE 9,1"
80 POKE &B7C4,18
90 PRINT" LOADING TUBBY RUNNER"
100 PRINT"TAP <SPACE> TO SPRINT!"
110 PRINT" ...."z$z$z$z$;
120 'Read data, convert and print Control Characters (these will hold sprite pixel
130 'data, beep occasionally and overwrite the "."s with "*"s)
140 t$=""
150 e=0
160 a$=""
170 'IF-THEN-ELSE evasion: There is no ENDIF in Locomotive BASIC! All conditionals
180 'are handled instead with WHILE-WEND
190 WHILE e=0
200 READ d$
210 FOR c=1 TO LEN(d$) STEP 2
220 a$=MID$(d$,c,2)
230 WHILE a$="xx"
240 a$="00"
250 e=1
260 WEND
270 t$=t$+CHR$(VAL("&"+a$))
280 NEXT
290 PRINT t$;
300 t$=""
310 WEND
320 'Equivalent of "LOCATE 1,1"
330 POKE &B7C4,0 
340 'Convert to control characters in a string (these will print "sprites") 
350 f$(2)="0909202094950A08080808080820202096979899200A0808080808080808202020209B9C9D200A0808080808080808202020209E9FA020xx"
360 f$(3)="0909202080810A08080808080820208283848586870A0808080808080808202088898A8B8C8D0A080808080808080820208E8F90919293xx"
370 a$=""
380 b%=1
390 e=0
400 WHILE e=0
410 FOR a=0 TO 1
420 e=0
430 FOR c=1 TO LEN(f$(a+2)) STEP 2
440 a$=MID$(f$(a+2),c,2)
450 WHILE a$="xx"
460 a$="00"
470 e=1
480 WEND
490 g$=CHR$(VAL("&"+a$))
500 f$(a)=f$(a)+g$
510 NEXT c,a
520 WEND
530 'Beep an octave higher (START THE RACE!)
540 SOUND 2,45,80
550 'Set up screen (Work in MODE 2)
560 MODE 2
570 'Display in MODE 0
580 CALL &BD1C
590 'Temporarily work in MODE 1, screen remains in MODE 0
600 POKE &B7C3,1
610 PEN 2
620 LOCATE 1,3
630 PRINT"1UP ---"
640 LOCATE 1,13
650 PRINT"CPU ---"
660 'Work in MODE 2, screen remains in MODE 0
670 POKE &B7C3,2
680 PEN 1
690 CALL &BD1C
700 'Part 2: Initialising game loop
710 t=TIME
720 a%=1
730 'MAIN GAME LOOP
740 WHILE a%<=70
750 'Print player and CPU opponent 
760 LOCATE a%,5
770 PRINT f$(a%\2 MOD 2)
780 LOCATE b%,15
790 PRINT f$(1-(b%\2 MOD 2))
800 'Update CPU movement
810 b%=b%+(2 AND RND>0.1 AND b%<=70)
820 'Update player movement from player input
830 p$=INKEY$
840 WHILE p$=" "
850 a%=a%+2
860 SOUND 1,800,5,15,,1
870 p$=""
880 WEND
890 CALL &BD19
900 WEND
910 'Clear screen and print results
920 MODE 1
930 POKE &B7C4,20
940 PRINT"You took";(TIME-t)\300;"seconds!"
950 WHILE b%>=70
960 PRINT" CPU Beat you!"
970 b%=0
980 WEND
990 'Wait for keypress
1000 WHILE INKEY$<>""
1010 WEND
1020 WHILE INKEY$=""
1030 WEND
1040 RUN
1050 'This arrangement of the data shows how the 'sprites' are set up
1060 '072a means BEEP, then PRINT "*", as feedback for the player.
1070 DATA "072a"
1080 '19 is a control code for SYMBOL.
1090 'The next line effectively says "SYMBOL &80,&00,&00,&00,&f1,&e2,&c7,&e7,&e7"
1100 DATA "1980000000f1e2c7e7e7"
1110 DATA "1981000000d361609ac0"
1120 DATA "198200000000005051e5"
1130 DATA "19830000000045c79acf"
1140 DATA "1984e3e1e5e3929a9a30"
1150 DATA "1985cac7c38a86303030"
1160 DATA "198600000000e3d34971"
1170 DATA "1987000000000065cad3"
1180 DATA "1988c2cfcbd300000000"
1190 DATA "1989c3a5a10101a5b1c3"
1200 DATA "198a30181a060f031b87"
1210 DATA "198b30303030180b43c2"
1220 DATA "072a"
1230 DATA "198c3030302563c3c380"
1240 DATA "198d000a200aa2822200"
1250 DATA "198e00000050e3c7d3c3"
1260 DATA "198f41f141c79ac000a2"
1270 DATA "1990c3c3cf808a000000"
1280 DATA "1991c5c7e55000000000"
1290 DATA "19927165309ac2e1e151"
1300 DATA "199300000000e3c3d382"
1310 DATA "1994f1e2c7e7e7e3e145"
1320 DATA "1995d361609ac0cac7c3"
1330 DATA "19965041c7924541a5a1"
1340 DATA "199741929a9a90c5c5ca"
1350 DATA "072a"
1360 DATA "19988a8630303030309a"
1370 DATA "19990000824920303030"
1380 DATA "199a0101051150000000"
1390 DATA "199b470f431bc767b1e3"
1400 DATA "199c9a0fc3c36131db70"
1410 DATA "199d2563c3c39b65c365"
1420 DATA "199ec7659bdbc3e30000"
1430 DATA "199f2063f100a2820000"
1440 DATA "19a09b82d382a2000000"
1450 DATA "19a1e4b10000887345b0"
1460 DATA "19a20000e4b100db90c5"
1470 DATA "19a30040e100007293c3"
1480 DATA "072a"
1490 DATA "19bca21353f2a0a0a011"
1500 DATA "19bd4145401040414541"
1510 DATA "19be5005110105010550"
1520 'Control codes for INK &0c,4,4 and INK &0d,5,5
1530 DATA "1c0c0404"
1540 DATA "1c0d0505"
1550 'End-of-data signal
1560 DATA "xx" 
